"""
fix_config.py

用途说明：
------------
本脚本用于修复 HuggingFace 格式模型 config.json 文件中 "text_config" 字段带来的兼容性问题。
部分模型（如 Qwen2.5 VL 微调、LoRA 合并后的模型）会将 "text_config" 以 dict 形式嵌入 config.json，
而 transformers 在某些加载场景下需要该字段为 transformers.Config 对象，否则会报错：
    AttributeError: 'dict' object has no attribute 'to_dict'

处理流程：
------------
1. 在模型目录（如 /root/autodl-tmp/FundusReasoner/experiments/med_pub_merge_model）外创建备份目录 backup/med_pub_merge_model；
2. 将原始 config.json 备份到 backup 路径下；
3. 删除 config.json 中的 "text_config" 字段（如果存在）；
4. 覆盖保存回原模型目录下的 config.json。

注意事项：
------------
- 脚本仅删除 "text_config" 字段，不更改其它内容。
- 建议每次修复前都运行脚本自动备份，确保可随时还原原始 config.json。
- 适用于 HuggingFace Transformers 相关模型的兼容修复，其他模型请谨慎使用。

作者：zym1105 
"""
import os
import shutil
import json

base_path = "/root/autodl-tmp/FundusReasoner/experiments"
model_name = "med_pub_merge_model"
model_path = os.path.join(base_path, model_name)
config_file = os.path.join(model_path, "config.json")

backup_dir = os.path.join(base_path, "backup", model_name)
backup_config_file = os.path.join(backup_dir, "config.json")

# 1. 创建备份目录
os.makedirs(backup_dir, exist_ok=True)

# 2. 备份原始 config.json
print(f"备份 {config_file} 到 {backup_config_file}")
shutil.copy2(config_file, backup_config_file)

# 3. 加载 config 并修改
with open(config_file, "r", encoding="utf-8") as f:
    config = json.load(f)

if "text_config" in config:
    print("检测到 'text_config' 字段，准备删除。")
    del config["text_config"]
else:
    print("未检测到 'text_config' 字段，无需删除。")

# 4. 保存回原始位置（覆盖）
with open(config_file, "w", encoding="utf-8") as f:
    json.dump(config, f, indent=2, ensure_ascii=False)
print(f"已保存修改后的 config.json 到 {config_file}")

# 5. 展示结果
print("\n处理完成！如需恢复可用备份文件覆盖原config。")
